/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package isgesis;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Martin
 */
public class PersistenciaFuncionario {

    private static PersistenciaFuncionario instance;

    public static PersistenciaFuncionario getInstance() {
        if (instance == null) {
            instance = new PersistenciaFuncionario();
        }
        return instance;
    }

    public ResultSet ejecutarSeleccion(String query) throws SQLException {
        ResultSet rs;
        try {
            Conexion.getInstance().conectar();
            rs = Conexion.getInstance().select(query);
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return rs;
    }

    public Funcionario recorerRS(ResultSet rs) throws SQLException, ParseException {
        Funcionario f1 = new Funcionario();
        try {
            f1.setCi(rs.getObject(1).toString());
            f1.setNombre(rs.getObject(2).toString());
            f1.setDireccion(rs.getObject(3).toString());
            f1.setApellido(rs.getObject(4).toString());
            ArrayList<Object> datos = new ArrayList<Object>();
            datos.add(f1.getCi());
            datos.add("idFuncionario");
            f1.setTelefonos(PersistenciaTelefono.getInstance().selectTelefonos(datos));

        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return f1;
    }

    public List<Funcionario> traerRS(String query) throws ParseException {
        List<Funcionario> funcionarios = new ArrayList<Funcionario>();
        try {
            ResultSet rs = ejecutarSeleccion(query);
            if (rs.next()) {
                funcionarios.add(recorerRS(rs));
                while (rs.next()) {
                    funcionarios.add(recorerRS(rs));
                }
            } else {
                Funcionario f = new Funcionario();
                funcionarios.add(f);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return funcionarios;
    }

    public List<Funcionario> selectFuncionario(ArrayList<Object> datos) throws ParseException, SQLException {
        String query = "";
        if (datos.get(1) == "ci") {
            query = "SELECT * FROM funcionarios WHERE ci=" + datos.get(0);
        } else {
            query = "select * from funcionarios where ci in (SELECT ci FROM ordenesfuncionarios WHERE numero=" + datos.get(0) + ")";
        }
        return traerRS(query);
    }

    public void insert(Funcionario funcionario) throws ParseException {
        try {
            String query = "INSERT INTO funcionarios (ci,nombre,direccion,apellido) VALUES('" + funcionario.getCi() + "','" + funcionario.getNombre() + "','" + funcionario.getDireccion() + "','" + funcionario.getApellido() + "')";
            Conexion.getInstance().conectar();
            Conexion.getInstance().insert(query);
        } catch (SQLException ex) {
            Logger.getLogger(isgesis.PersistenciaEstado.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
